package IO.序列化;

//public File[] listFiles(FileFilter filter)方法，可以过滤获取到的文件，需要实现FileFilter接口。

import java.io.*;
/*
File.class实例方法：public File[] listFiles(FileFilter filter) {
@FunctionalInterface
public interface FileFilter {
    boolean accept(File pathname);
}
*/
public class 使用FileFilter {
	public static void main(String[] args) {
		try {
			getFiles("f:\\");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	private static void getFiles(String path_src) throws IOException {
		File pathS_Files = new File(path_src);
		if (!pathS_Files.isDirectory()) {
			System.out.println("输入的文件夹路径有误！");
			return;
		}
      // ↓↓↓
		// 本例核心代码：两个版本（其实还能写个匿名内部类版本）
		//File.class实例方法：public File[] listFiles(FileFilter filter) {
		// File[] listFiles = pathS_Files.listFiles(new MyFileFilter());
		// * FileFilter接口只有一个方法，于是可以采用Lambda表达式写法：
		File[] listFiles = pathS_Files.listFiles((pathname) -> {
			if (pathname.isDirectory()) {
				// 是文件夹，放行
				return true;
			} else if (pathname.getName().toLowerCase().endsWith(".txt")) {
				// 是匹配的文件，放行
				return true;
			} else {
				// 其它文件，过滤掉
				return false;
			}
		});
      // ↑↑↑
		for (int i = 0; i < listFiles.length; i++) {
			File f1 = listFiles[i];
			if (f1.isDirectory()) {
				// 如果是文件夹，继续往下找
				getFiles(f1.getAbsolutePath());
			} else if (f1.isFile()) {
				System.out.println(f1.getAbsolutePath());
			}
		}
	}
}